// middleware.ts
import { NextRequest, NextResponse } from 'next/server'
import {
  protectedRoutes,
  loginRedirect,
  publicRoutes,
  apiRoutes,
} from '@/assets/static'

// 定义需要重定向的路由及其目标路由
const redirectRoutes = new Map<string, string>([
  ['/login', '/404'],
  // 可以添加更多重定向规则
  // ['/old-page', '/new-page'],
  // ['/deprecated', '/updated'],
])

// 定义需要完全阻止访问的路由
const blockedRoutes = ['/private', '/internal']

export async function handleAuth(request: NextRequest, response: NextResponse) {
  const { pathname } = request.nextUrl

  // 检查是否是需要重定向的路由
  if (redirectRoutes.has(pathname)) {
    const destination = redirectRoutes.get(pathname)
    if (destination) {
      return NextResponse.redirect(new URL(destination, request.url))
    }
  }

  // 检查是否是被阻止的路由
  if (blockedRoutes.some((route) => pathname.startsWith(route))) {
    return NextResponse.redirect(new URL('/404', request.url))
  }

  // 检查是否是 API 请求
  if (apiRoutes.some((route) => pathname.startsWith(route))) {
    return response
  }

  // 检查是否是公开路由
  const isPublicRoute = publicRoutes.some((route) => pathname.startsWith(route))
  if (isPublicRoute) {
    return response
  }

  // 获取 token
  const token = request.cookies.get('auth-token')?.value

  // 检查是否是受保护的路由
  const isProtectedRoute =
    pathname === '/' || protectedRoutes.some((route) => pathname.startsWith(route))

  // 如果没有 token 且访问受保护的路由
  if (!token && isProtectedRoute) {
    const url = new URL(loginRedirect, request.url)
    url.searchParams.set('from', pathname)
    return NextResponse.redirect(url)
  }

  return response
}

// 配置中间件匹配的路由
// export const config = {
//   matcher: [
//     // 匹配所有需要重定向的路由
//     ...Array.from(redirectRoutes.keys()),
//     // 匹配所有被阻止的路由
//     ...blockedRoutes,
//   ],
// }
